#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <limits.h>
#include <string.h>
#include "grandeint.h"

#define MAX_MEM 1000000

/* NAO ALTERAR ESTE ARQUIVO */

int main() {
   /* ----------------------------------------------------------------------
      Declarações e início para verificação do uso da memória dinâmica.
      ---------------------------------------------------------------------- */
   struct mallinfo info = mallinfo();
   int MemDinInicial = info.uordblks, MemDinFinal;
   /* ---------------------------------------------------------------------- */
   
   
   char operacao;
   char p1[MAX_MEM];
   char p2[MAX_MEM];

   fscanf(stdin,"%c\n",&operacao);
   switch(operacao){
     case '+':
       fscanf(stdin,"%s",p1);
       fscanf(stdin,"%s",p2);
       imprime_soma_grandeint(p1,p2);
     break;
     case '*':
       fscanf(stdin,"%s",p1);
       fscanf(stdin,"%s",p2);
       imprime_mult_grandeint(p1,p2);
     break;
     case '/':
       fscanf(stdin,"%s",p1);
       fscanf(stdin,"%s",p2);
       imprime_div_grandeint(p1,p2);
     break;
     case 'G':
       fscanf(stdin,"%s",p1);
       imprime_godel(p1);
     break;
     default:
       fprintf(stdout, "Opção desconhecida: `%c´\n", operacao);
     break;
   }
   
   fprintf(stdout,"\n");

   /* --------------------------------------------------------------------- */
   /* Verificação final do uso da memória dinâmica                          */
   /* --------------------------------------------------------------------- */
   info = mallinfo();
   MemDinFinal = info.uordblks;
   if (MemDinInicial!=MemDinFinal)
      printf("\n\nMemória dinâmica não foi totalmente liberada (%d, %d)\n",
	     MemDinInicial,MemDinFinal);
   /* --------------------------------------------------------------------- */
   return 0;
}

